#!/usr/bin/env python
# encoding: utf-8
'''
build generated bindings from bindings.desc for AP_Scripting
'''

from waflib.TaskGen import after_method, before_method, feature
import os

# these are only used for binding generation, not compilation of the library
BINDING_CFLAGS="-std=c99 -Wno-error=missing-field-initializers -Wall -Werror -Wextra"
BINDING_CC="gcc"

def configure(cfg):
    cfg.env.AP_LIB_EXTRA_SOURCES['AP_Scripting'] = ['lua_generated_bindings.cpp']

def relpath(bld, node):
    '''make a build relative path. This is needed for CI to pass on azure'''
    blddir = bld.bldnode.make_node(".").abspath()
    return os.path.relpath(node.abspath(), blddir)

def build(bld):
    main_c = bld.srcnode.make_node('libraries/AP_Scripting/generator/src/main.c')
    gen_bindings = bld.bldnode.find_or_declare('gen-bindings')

    main_c_rel = relpath(bld, main_c)
    gen_bindings_rel = relpath(bld, gen_bindings)

    bld(
        # build gen-bindings compiler
        source=main_c,
        target=[gen_bindings],
        # we should have configure tests for finding the native compiler
        rule="%s %s -o %s %s" % (BINDING_CC, BINDING_CFLAGS, gen_bindings_rel, main_c_rel),
        group='dynamic_sources',
    )

    bindings = bld.srcnode.make_node('libraries/AP_Scripting/generator/description/bindings.desc')
    bindings_rel = relpath(bld, bindings)
    gen_bindings = bld.bldnode.find_or_declare('gen-bindings')
    generated_cpp = bld.bldnode.find_or_declare('libraries/AP_Scripting/lua_generated_bindings.cpp')
    generated_h = bld.bldnode.find_or_declare('libraries/AP_Scripting/lua_generated_bindings.h')

    bld(
        # build the bindings
        source=[bindings, gen_bindings],
        rule="./gen-bindings -o libraries/AP_Scripting/lua_generated_bindings -i %s" % bindings_rel,
        target=[generated_cpp, generated_h],
        group='dynamic_sources',
    )
